#include "vibrate_motor.h"


PWMx_InitDefine virate_init;
PWMx_Duty vibrate_duty;


// 马达的GPIO配置 -- 对于马达只要配置了端口就会默认震动，即默认接入高电平
void GPIO_Vibrate_Motor_Config(){
	GPIO_InitTypeDef init;
	init.Pin = GPIO_Pin_2;
	init.Mode = GPIO_OUT_PP;
	
	GPIO_Inilize(GPIO_P2, &init);
}


void PWM_Vibrate_Motor_Config(){
	// 通道配置
	virate_init.PWM_Mode = CCMRn_PWM_MODE2;		
	virate_init.PWM_Duty = 0;			//占空比时间, 0~Period
	virate_init.PWM_EnoSelect = ENO7P;
	PWM_Configuration(PWM7, &virate_init);
	
	// 通道所属的类型配置
	virate_init.PWM_Period = PERIOD;		//周期时间,   0~65535
	virate_init.PWM_DeadTime = 0;	//死区发生器设置, 0~255
	virate_init.PWM_CEN_Enable = DISABLE;		//使能计数器
	virate_init.PWM_MainOutEnable = DISABLE;//主输出使能
	PWM_Configuration(PWMB, &virate_init);
	
	// PWM中断使能
	NVIC_PWM_Init(PWM7, DISABLE, Priority_1);
	
	// 引脚切换
	PWM7_SW(PWM7_SW_P22);
}


// 震动马达初始化
void vibrate_motor_init(){
	// 外部寄存器使能--用PWM必须打开 --- 必须放到PWM配置之前
	EAXSFR(); 
	GPIO_Vibrate_Motor_Config();
	PWM_Vibrate_Motor_Config(); 
}



// 震动反馈提示
void motor_vibrate_remider(){
	VIBRATE_MOTOR_PIN = 1;
	delay_ms(250);
	VIBRATE_MOTOR_PIN = 0;
	delay_ms(250);
	VIBRATE_MOTOR_PIN = 1;
	delay_ms(250);
	VIBRATE_MOTOR_PIN = 0;
}


// 打开震动马达
void motor_vibrate_start(){
	virate_init.PWM_CEN_Enable = ENABLE;
	virate_init.PWM_MainOutEnable = ENABLE;
	PWM_Configuration(PWMB, &virate_init);
}


// 关闭震动马达
void motor_vibrate_stop(){
	virate_init.PWM_CEN_Enable = DISABLE;
	virate_init.PWM_MainOutEnable = DISABLE;
	PWM_Configuration(PWMB, &virate_init);
}


// pwm控制马达震动
void pwm_vibrate_motor(){
	int percent = 0;
	int direct = 1;
	while(1){
		percent += direct;
		// 从1%到100%逐渐递增
		vibrate_duty.PWM7_Duty = PERIOD * percent / 100;
		UpdatePwm(PWM7, &vibrate_duty);
		if(percent >= 100){
			direct = -1;
		}
		if(percent <= 0){
			direct = 1;
		}
		delay_ms(50);
	}
}
